Network data storage is most economically provided by an array of low-cost disk drives integrated with a large semiconductor cache memory. A number of data mover computers are used to interface the cached disk array to the network. The data mover computers perform file locking management and mapping of the network files to logical block addresses of storage in the cached disk array, and move data between network clients and the storage in the cached disk array. See, for example, Vahalia et al. U.S. Pat. No. 5,893,140 issued Apr. 6, 1999, entitled “File Server Having a File System Cache and Protocol for Truly Safe Asynchronous Writes,” incorporated herein by reference.
Typically the logical block addresses of storage are subdivided into logical volumes. Each logical volume is mapped to the physical storage using a respective striping and redundancy scheme. The data mover computers typically use the Network File System (NFS) protocol to receive file access commands from clients using the UNIX (Trademark) operating system or the LINUX (Trademark) operating system, and the data mover computers use the Common Internet File System (CIFS) protocol to receive file access commands from clients using the MicroSoft (MS) WINDOWS (Trademark) operating system. The NFS protocol is described in “NFS: Network File System Protocol Specification,” Network Working Group, Request for Comments: 1094, Sun Microsystems, Inc., Santa Clara, Calif., March 1989, 27 pages, and in S. Shepler et al., “Network File System (NFS) Version 4 Protocol,” Network Working Group, Request for Comments: 3530, The Internet Society, Reston, Va., April 2003, 262 pages. The CIFS protocol is described in Paul J. Leach and Dilip C. Naik, “A Common Internet File System (CIFS/1.0) Protocol,” Network Working Group, Internet Engineering Task Force, The Internet Society, Reston, Va., Dec. 19, 1997, 121 pages.
The Network File System (NFS) protocol and the Common Internet File System Protocol (CIFS) permit network clients to share access to files in a file system. A popular kind of file system is a UNIX-based file system as described in Uresh Vahalia, Unix Internals—The New Frontiers, Chapter 9, File System Implementations, pp. 261-290, Prentice-Hall, Inc., Upper Saddle River, N.J. (1996). A file in a Unix-based file system is a hierarchy of file system blocks. The file system block at the top or root of the hierarchy is called an “inode.” The inode contains attributes of the file, such as the file type, the size of the file, user and group IDs of the owner of the file, timestamps, and permissions and mode flags. The inode also contains a block pointer array including pointers to one or more file system blocks that are directly below the inode in the hierarchy. The data of the file is contained in one or more file system blocks at the bottom or leaves of the hierarchy. If the file contains more than ten data blocks, then there will be at least one indirect block directly below inode in the hierarchy. Each indirect block includes an array of up to 256 block pointers. In a very large file, the can be up to three indirect blocks along the path from the inode down to a data block of the file.
The fact that the file contains pointers to the data blocks in the file permits any free block of the file system to be allocated to a file of the file system and mapped to any logical block of the logical extent of the file. The additional flexibility of file system block allocation permits more efficient storage utilization by reducing storage fragmentation and permitting sparse files and efficient dynamic extension of files. In addition, the flexibility of allocating any free file system block to any logical block in the logical extent of a file supports supplementary storage services such as a snapshot copy facility in which file system indirect blocks and file system data blocks are shared between a production file and snapshot copies of the production file. However, the additional flexibility of file system block allocation has an associated cost of searching the block hierarchy of a file from the inode down to a leaf-level indirect block to obtain the block mapping for a specified offset in the logical extent of the file when performing a read or write of data to the file.
Recently there has been a trend for network clients to share random concurrent access to large files. This trend has been facilitated by the Network File System (NFS) Version 4 Protocol, which has support for byte range file locking. The file locking support is structured so that an RPC callback mechanism is not required. See Shepler et al., “Network File System (NFS) version 4 Protocol,” Request for Comments 3530, April 2003, 275 pages, Network Appliance, Inc., Sunnyvale, Calif.